<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

<script>
    // Object.defindProperty : 对象定义新属性或修改原有属性

    // enumerable 当且仅当该属性的 enumerable 键值为 true 时，该属性才会出现在对象的枚举属性中。 默认为 false。

    // writble 当且仅当该属性的 writable 键值为 true 时， 属性的值， 也就是上面的 value， 才能被赋值运算符(en - US) 改变。 默认为 false。

    // configurable 当且仅当该属性的 configurable 键值为 true 时，该属性的描述符才能够被改变，同时该属性也能从对应的对象上被删除。 默认为 false。

    let obj = {
        name: 'jack'
    };

    // 向对象添加新的属性
    Object.defineProperty(obj, "age", {
        value: 20,
        writable: true,
        enumerable: true,
        configurable: true
    });

    // 也可以修改现有属性的值
    Object.defineProperty(obj, "name", {
        value: 'marry',
        writable: true,
        enumerable: true,
        configurable: true
    });

    console.log(obj)

    // defindProperty 也可以定义数组对象的属性，如下

    let test = [{
        computer: 'Dell'
    }]
    Object.defineProperty(test[0], "cpu", {
        value: 'Intel',
        writable: true,
        enumerable: true,
        configurable: true
    });

    // 用直接点号也可以
    test[0].name = 'name'
    test[0].computer = 'Apple'
    console.log(test)
</script>
</body>

</html>
